//
//  AppDelegate.swift
//  SinaWeibo
//
//  Created by mac on 15/12/12.
//  Copyright © 2015年 mac. All rights reserved.
//

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
      
            //不使用storyboard  window 在这个地方没有被实例化  不存在window
            //需要程序员手动实例化
            
            _ = UserAccount.loadAccount()
            
           // print("-------------------")
           // print("\(account) 哈哈哈哈哈")
            //注意 注意 注意  一定不要提前调用
//            let result = isNewVersion()
//            print(result)
            window = UIWindow(frame: UIScreen.mainScreen().bounds)
            window?.backgroundColor = UIColor.whiteColor()
            window?.makeKeyAndVisible()
            
            //设置主题颜色
            setThemeColor()
            //注册通知
            registerNotification()
            
            //需要设置根视图控制器
            window?.rootViewController = defaultViewController()
            return true
        }
    
    private func defaulViewController() ->UIViewController {
        //判断用户是否登录
        if UserAccountViewModel().userLogin{
            //根据是否是新版本  显示对应页面
            
            return isNewVersion() ? WelcomeViewController():MainViewController()
            
        }
        
        //用户没有登录
        return MainViewController()
        
    }

    
        //注册通知
        private func registerNotification() {
            
            //单例对象 程序一运行 就会简历 Appdelegate单例对象  直到程序销毁的时候 才会调用
            //写与不写 没有本质上的区别  只是一种编码习惯而已
            //注册 切换根视图控制器的通知
            
            //object 如果不为空: 通知  ,  nil: 对应广播
            NSNotificationCenter.defaultCenter().addObserver(self, selector: "switchRootVC:", name: WBSwitchRootVCNotification, object: nil)
        }
        
        //移除通知的操作
        deinit {
            NSNotificationCenter.defaultCenter().removeObserver(self)
        }
        
        //只要是OC中 target - action 这种消息机制 seletor类型都需要使用 @objc 来兼容
        //1.按钮的点击事件
        //2.通知的响应事件
        //3.代理的可选协议方法
        @objc private func switchRootVC(n: NSNotification) {
            
           // print(n)
            
            //根据通知去切换对应根视图控制器
            if  n.object != nil {
                //跳转到welcome
                window?.rootViewController = WelcomeViewController()
                return
            }
            
            //首页
            window?.rootViewController = MainViewController()
        }
        
        //根据用户是否登录显示具体的页面
        private func defaultViewController() -> UIViewController {
            //根据用户是否登录
            if UserAccountViewModel().userLogin {
                //需要根据是否是新版本 显示对应页面
                //            if isNewVersion() {
                //                //是新版本
                //                return NewFeatureViewController()
                //            }
                //            return WelcomeViewController()
                return isNewVersion() ? NewFeatureViewController() : WelcomeViewController()
            }
            //用户没有登录下
            return MainViewController()
        }
        
        // MARK:判断是否是新版本
        private func isNewVersion() -> Bool {
            
            //1.获取当前应用的版本号
            let info = NSBundle.mainBundle().infoDictionary
            let currentStr = info!["CFBundleShortVersionString"] as! String
            let currentNum = Double(currentStr)
           // print(currentNum)
            //2.获取本地缓存的版本
            //用userDefaults 来存储版本
            let userDefaults = NSUserDefaults.standardUserDefaults()
            let sandBoxKey = "sandBoxKey"
            let lastNum = userDefaults.doubleForKey(sandBoxKey)
            
            //3. 立即存储 当前应用的版本号
            userDefaults.setDouble(currentNum!, forKey: sandBoxKey)
            userDefaults.synchronize()
            //4.比较新版(当前版本) 版本号 和老版本(本地缓存的版本)的版本号
            
            return currentNum! > lastNum
        }
        
        private func setThemeColor() {
            //一定需要尽早设置
            UINavigationBar.appearance().tintColor = themeColor
            UITabBar.appearance().tintColor = themeColor
        }
}

